package dao

import (
	"time"
)

// 这是 Order 的全局公开dao对象，被service层调用!
var OrderDao = orderDao{}

// 订单表
// 这是 order表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Order struct {
	Id              int32     `json:"id" form:"id" v:"id" db:"id"`
	UserId          int32     `json:"user_id" form:"user_id" v:"user_id" db:"user_id"`                                         // 用户表的用户ID
	OrderSn         string    `json:"order_sn" form:"order_sn" v:"order_sn" db:"order_sn"`                                     // 订单编号
	OrderStatus     int16     `json:"order_status" form:"order_status" v:"order_status" db:"order_status"`                     // 订单状态
	AfterSaleStatus int16     `json:"after_sale_status" form:"after_sale_status" v:"after_sale_status" db:"after_sale_status"` // 售后状态，0是可申请，1是用户已申请，2是管理员审核通过，3是管理员退款成功，4是管理员审核拒绝，5是用户已取消
	Consignee       string    `json:"consignee" form:"consignee" v:"consignee" db:"consignee"`                                 // 收货人名称
	Mobile          string    `json:"mobile" form:"mobile" v:"mobile" db:"mobile"`                                             // 收货人手机号
	Address         string    `json:"address" form:"address" v:"address" db:"address"`                                         // 收货具体地址
	Message         string    `json:"message" form:"message" v:"message" db:"message"`                                         // 用户订单留言
	GoodsPrice      float64   `json:"goods_price" form:"goods_price" v:"goods_price" db:"goods_price"`                         // 商品总费用
	FreightPrice    float64   `json:"freight_price" form:"freight_price" v:"freight_price" db:"freight_price"`                 // 配送费用
	CouponPrice     float64   `json:"coupon_price" form:"coupon_price" v:"coupon_price" db:"coupon_price"`                     // 优惠券减免
	IntegralPrice   float64   `json:"integral_price" form:"integral_price" v:"integral_price" db:"integral_price"`             // 用户积分减免
	GrouponPrice    float64   `json:"groupon_price" form:"groupon_price" v:"groupon_price" db:"groupon_price"`                 // 团购优惠价减免
	OrderPrice      float64   `json:"order_price" form:"order_price" v:"order_price" db:"order_price"`                         // 订单费用， = goods_price &#43; freight_price - coupon_price
	ActualPrice     float64   `json:"actual_price" form:"actual_price" v:"actual_price" db:"actual_price"`                     // 实付费用， = order_price - integral_price
	PayId           string    `json:"pay_id" form:"pay_id" v:"pay_id" db:"pay_id"`                                             // 微信付款编号
	PayTime         time.Time `json:"pay_time" form:"pay_time" v:"pay_time" db:"pay_time"`                                     // 微信付款时间
	ShipSn          string    `json:"ship_sn" form:"ship_sn" v:"ship_sn" db:"ship_sn"`                                         // 发货编号
	ShipChannel     string    `json:"ship_channel" form:"ship_channel" v:"ship_channel" db:"ship_channel"`                     // 发货快递公司
	ShipTime        time.Time `json:"ship_time" form:"ship_time" v:"ship_time" db:"ship_time"`                                 // 发货开始时间
	RefundAmount    float64   `json:"refund_amount" form:"refund_amount" v:"refund_amount" db:"refund_amount"`                 // 实际退款金额，（有可能退款金额小于实际支付金额）
	RefundType      string    `json:"refund_type" form:"refund_type" v:"refund_type" db:"refund_type"`                         // 退款方式
	RefundContent   string    `json:"refund_content" form:"refund_content" v:"refund_content" db:"refund_content"`             // 退款备注
	RefundTime      time.Time `json:"refund_time" form:"refund_time" v:"refund_time" db:"refund_time"`                         // 退款时间
	ConfirmTime     time.Time `json:"confirm_time" form:"confirm_time" v:"confirm_time" db:"confirm_time"`                     // 用户确认收货时间
	Comments        int16     `json:"comments" form:"comments" v:"comments" db:"comments"`                                     // 待评价订单商品数量
	EndTime         time.Time `json:"end_time" form:"end_time" v:"end_time" db:"end_time"`                                     // 订单关闭时间
	AddTime         time.Time `json:"add_time" form:"add_time" v:"add_time" db:"add_time"`                                     // 创建时间
	UpdateTime      time.Time `json:"update_time" form:"update_time" v:"update_time" db:"update_time"`                         // 更新时间
	Deleted         int8      `json:"deleted" form:"deleted" v:"deleted" db:"deleted" gm:"deleted"`                            // 逻辑删除

}

// 注意:这是 Order 的私有dao对象，只能在dao层内使用!
type orderDao struct {
	InsertTemplate func(arg Order) (int64, error)       //插入一条记录
	UpdateTemplate func(arg Order) (int64, error)       //更新一条记录
	DeleteTemplate func(id int64) (int64, error)        `args:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Order, error)        `args:"id"` //根据传入的主键获取一条记录
	List           func(arg OrderList) ([]Order, error) //模糊分页查询
}

/*
// 这是 order 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type OrderPostman struct {
id
user_id
order_sn
order_status
after_sale_status
consignee
mobile
address
message
goods_price
freight_price
coupon_price
integral_price
groupon_price
order_price
actual_price
pay_id
pay_time
ship_sn
ship_channel
ship_time
refund_amount
refund_type
refund_content
refund_time
confirm_time
comments
end_time
add_time
update_time
deleted

}*/

// 这是 order 表的批量请求参数
type OrderReq struct {
	List []Order `json:"list" form:"list"`
}

// 这是 orderDao.List()方法的请求参数
type OrderList struct {
	Page
}
